﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using TVH.Web.Code;
using TVH.Negocio;
using TVH.Entidade;
using TVH.Persistencia;

namespace TVH.Exibicao
{
    public partial class Conta : BasePage
    {
        NegItemPedido persistencia = new NegItemPedido();
        PerPredio perPredio = new PerPredio();
        PerQuarto perQuarto = new PerQuarto();

        protected void Page_Load(object sender, EventArgs e)
        {
            ExibirMensagemSucesso("");
            if (!IsPostBack)
            {
                CarregarCombos();
            }
            CarregarGrid();

        }
        public List<Setor> Setores
        {
            get
            {
                return ViewState["Setores"] as List<Setor>;
            }
            set
            {
                ViewState["Setores"] = value;
            }
        }
        private void CarregarCombos()
        {
            ddlPredio.DataSource = perPredio.ObterLista();
            ddlPredio.DataTextField = "Identificacao";
            ddlPredio.DataValueField = "ID";
            ddlPredio.DataBind();

            ddlPredio.SelectedValue = Session.Usuario.IdPredio.ToString();
            CarregarComboQuarto();

        }

        public void ddlPredio_SelectedIndexChanged(object sender, EventArgs e)
        {
            CarregarComboQuarto();
        }

        private void CarregarComboQuarto()
        {

            ddlQuarto.DataSource = perQuarto.ObterLista(new Quarto()
            {
                IdPredio = Convert.ToInt32(ddlPredio.SelectedValue)
            });
            ddlQuarto.DataTextField = "Identificacao";
            ddlQuarto.DataValueField = "ID";
            ddlQuarto.DataBind();

            ddlQuarto.Items.Insert(0, new ListItem("Selecione"));
        }

        public void btnFechar_Click(object sender, EventArgs e)
        {
            try
            {
                if (DataSource != null && DataSource.Count > 0)
                {
                    foreach (var item in DataSource)
                    {
                        item.Status = "Pago";
                        persistencia.Alterar(item);
                    }
                    CarregarGrid();
                    ExibirMensagemSucesso("Conta fechada com sucesso!");

                }
                else
                {
                    ExibirMensagemErro("Por favor selecione um quarto com pedidos.", null);

                }


            }
            catch (Exception ex)
            {
                ExibirMensagemErro("Erro ao fechar a conta.", ex);
            }
        }

        public void btnBuscar_Click(object sender, EventArgs e)
        {
            if (ddlPredio.SelectedIndex == 0)
            {
                ExibirMensagemErro("Por favor selecione um prédio.", null);
                return;
            }
            if (ddlQuarto.SelectedIndex == 0)
            {
                ExibirMensagemErro("Por favor selecione um quarto.", null);
                return;
            }
            CarregarGrid();
        }

        public void gridResultado_PageIndexChanging(object sender, GridViewPageEventArgs e)
        {
            (sender as GridView).PageIndex = e.NewPageIndex;
            (sender as GridView).DataBind();
        }

        public void gridResultado_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            //if (e.Row.RowType == DataControlRowType.DataRow)
            //{
            //    var link = e.Row.FindControl("lnkConcluir");
            //    ((LinkButton)link).Attributes.Add("onclick", "javascript:return confirm('Concluir o preparo do item?')");
            //}
        }

        public void gridResultado_RowDeleting(object sender, GridViewDeleteEventArgs e)
        {
            try
            {
                persistencia.Excluir(new Entidade.ItemPedido() { Id = Convert.ToInt32(((GridView)sender).DataKeys[e.RowIndex].Value) });
                CarregarGrid();
                ExibirMensagemSucesso("Categoria excluída com sucesso!");
            }
            catch (Exception ex)
            {
                ExibirMensagemErro("Erro ao excluir categoria!", ex);
            }
        }


        public void gridResultado_SelectedIndexChanging(object sender, GridViewSelectEventArgs e)
        {
            hdnGridAction.Value = "Detalhar";
            hdnID.Value = ((GridView)sender).DataKeys[e.NewSelectedIndex].Value.ToString();
            Server.Transfer("~/Cadastro/Categoria.aspx", true);
        }


        public void gridResultado_RowEditing(object sender, GridViewEditEventArgs e)
        {
            hdnGridAction.Value = "Editar";
            hdnID.Value = ((GridView)sender).DataKeys[e.NewEditIndex].Value.ToString();
            Server.Transfer("~/Cadastro/Categoria.aspx", true);
        }

        public List<ItemPedido> DataSource
        {
            get
            {
                return ViewState["DataSource"] as List<ItemPedido>;
            }
            set
            {
                ViewState["DataSource"] = value;
            }
        }

        private void Filtrar()
        {
            //var setorSelecionado = Setores.FirstOrDefault(setor =>
            //        setor.Id.Value.ToString().Equals(ddlSetor.SelectedValue));
            //if (setorSelecionado != null)
            //{
            //    var filtrado = DataSource.Where(item =>
            //        setorSelecionado.Categorias
            //            .Exists(categoria => categoria.Id == item.IdCategoria)).ToList();
            //    ExibirGrid(filtrado);
            //}
            //else
            //{
                ExibirGrid(DataSource);
            //}
        }

        public decimal GetTotal()
        {
            var total = DataSource.Sum(x => x.Valor);

            return total.Value;
        }

        private void CarregarGrid()
        {
            DataSource = persistencia.ObterLista(new ItemPedido()
            {
                Status = "Concluido"
            });
            DataSource = DataSource.OrderBy(x => x.Pedido.DataPedido).ToList();
            DataSource = DataSource.Where(x =>
                ddlQuarto.SelectedIndex > 0 && ddlPredio.SelectedIndex > 0 &&
                x.Pedido.CodigoQuarto.Value == Convert.ToInt32(ddlQuarto.SelectedValue)
                && x.Pedido.CodigoPredio.Value == Convert.ToInt32(ddlPredio.SelectedValue)).ToList();
            Filtrar();

        }

        private void ExibirGrid(object dataSource)
        {

            gridResultado.DataSource = dataSource;
            gridResultado.DataBind();
        }
    }
}